﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using PersistenciaAccessLIB;
using System.Configuration;


namespace KimberlyDashboardLIB
{
    public class Seguridad
    {        
        private Persistencia _persistencia;

        public Seguridad()
        {            
            this._persistencia = new Persistencia(ConfigurationManager.ConnectionStrings["CONEXION"].ToString());
        }

        /// <summary>
        /// Valida si el login existe en la base de datos. Si existe, se retorna un objeto Usuario con toda su 
        /// información cargada
        /// </summary>
        /// <param name="login"></param>
        /// <returns></returns>
        public Usuario ValidarUsuario(string login)
        {
            Usuario usuario = null;

            //Se obtiene la info del usuario            
            DataSet dts = this._persistencia.ExecuteDataSet("SELECT Id, Nombre, Apellido FROM USUARIO WHERE usuario = '" + login + "' AND activo = 1");
            if (dts.Tables[0].Rows.Count > 0)
            {
                usuario = new Usuario();
                usuario.Id = Convert.ToInt32(dts.Tables[0].Rows[0]["Id"].ToString());
                usuario.Login = login;
                usuario.Nombre = dts.Tables[0].Rows[0]["Nombre"].ToString() + " " + dts.Tables[0].Rows[0]["Apellido"].ToString();                

                //Se obtienen los roles a los que pertenece
                DataSet dtsRoles = this._persistencia.ExecuteDataSet("SELECT IdRol FROM USUARIO_ROL WHERE IdUsuario = " + usuario.Id.ToString());
                for (int i = 0; i < dtsRoles.Tables[0].Rows.Count; i++)
                {                    
                    usuario.Roles.Add((Enumeraciones.Rol)Convert.ToInt32(dtsRoles.Tables[0].Rows[i]["IdRol"].ToString()));
                }
            }           

            return usuario;
        }

        /// <summary>
        /// Retorna dataset con roles activos
        /// </summary>
        /// <returns></returns>
        public DataSet GetRoles()
        {
            return this._persistencia.ExecuteDataSet("SELECT Id, Rol FROM ROL WHERE Activo = 1 ORDER BY Rol");
        }

        /// <summary>
        /// Retorna dataset con usuarios activos
        /// </summary>
        /// <returns></returns>
        public DataSet GetUsuarios()
        {
            string sql = "SELECT USUARIO.Id, Usuario, Nombre, Apellido, Rol FROM ((USUARIO) " +
                "INNER JOIN USUARIO_ROL ON USUARIO.Id = USUARIO_ROL.IdUsuario) " +
                "INNER JOIN ROL ON USUARIO_ROL.IdRol = ROL.Id " +
                "WHERE USUARIO.Activo = 1 ORDER BY USUARIO.Usuario";
            return this._persistencia.ExecuteDataSet(sql);
        }


    }
}
